From: Dario Faggioli Date: Fri, 8 Jun 2012 14:26:01 +0000 (+0100) Subject: xl: check for meaningful combination of sedf config file parameters X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~8334 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=c5156a6d18a496160b182bf241dd2f2056dbcb4f;p=xen.git xl: check for meaningful combination of sedf config file parameters As it happens in the implementation of `xl sched-sedf -d ...', some consistency checking is needed for the scheduling parameters when they come from the config file. Signed-off-by: Dario Faggioli Acked-by: Ian Jackson Acked-by: George Dunlap Committed-by: Ian Jackson --- diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index afa0af679f..3ea95ef426 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -550,6 +550,31 @@ vcpp_out: return rc; } +static int sched_params_valid(libxl_domain_sched_params *scp) +{ + int has_weight = scp->weight != LIBXL_DOMAIN_SCHED_PARAM_WEIGHT_DEFAULT; + int has_period = scp->period != LIBXL_DOMAIN_SCHED_PARAM_PERIOD_DEFAULT; + int has_slice = scp->slice != LIBXL_DOMAIN_SCHED_PARAM_SLICE_DEFAULT; + libxl_domain_sched_params sci; + + libxl_domain_sched_params_get(ctx, domid, &sci); + + /* The sedf scheduler needs some more consistency checking */ + if (sci.sched == LIBXL_SCHEDULER_SEDF) { + if (has_weight && (has_period || has_slice)) + return 0; + + if (has_weight) { + scp->slice = 0; + scp->period = 0; + } + if (has_period || has_slice) + scp->weight = 0; + } + + return 1; +} + static void parse_config_data(const char *config_source, const char *config_data, int config_len, @@ -644,6 +669,10 @@ static void parse_config_data(const char *config_source, b_info->sched_params.latency = l; if (!xlu_cfg_get_long (config, "extratime", &l, 0)) b_info->sched_params.extratime = l; + if (!sched_params_valid(&b_info->sched_params)) { + fprintf(stderr, "Invalid scheduling parameters\n"); + exit(1); + } if (!xlu_cfg_get_long (config, "vcpus", &l, 0)) { b_info->max_vcpus = l;